package com.ying.tests.BBBbook.java8.Thread;

/**
 * 查看线程的所有状态
 */
public class ThreadStudy1 {

    public static void main(String[] args) {
        // 创建了一个线程执行5次
        Thread thread = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("----------thread线程结束----------");
        });
        // 查看线程的状态
        Thread.State state = null;
        state = thread.getState();
        // 这时候我们只是创建了个线程，也就是新建 NEW 的状态
        System.out.println("线程状态：" + state);
        // 启动线程
        thread.start();
        state = thread.getState();
        // 这时候我们已经启动了线程，然后来看看现在线程的状态就绪 RUNNABLE
        System.out.println("线程状态：" + state);

        // 根据线程的状态来停止死循环
//        while (state != Thread.State.TERMINATED) {
//            try {
//                Thread.sleep(200);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        }
//        state = thread.getState();
//        System.out.println("线程状态：" + state);

        // 根据线程的总条数来停止死循环
        while (true) {
            int i = Thread.activeCount();
            System.out.println("目前线程数量：" + i);
            /**
             * Monitor Ctrl-Break这个线程只会在IDEA中被打印出来
             * 在IDEA中通过debug启动的不会出现，只有run启动的会出现
             * 所以在idea中执行run的时候这个要写成2而不能是1在eclipse
             * 中却不会出现这个问题，这是软件引起的在开发调试过程要注意。
             */
            if (i == 2) {
                break;
            }
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 查看线程的状态
            state = thread.getState();
            System.out.println("线程状态：" + state);

        }
    }

}
